s = 0
'''
【列表、元组、字典、集合的区别】
数据类型   序列类型    元素是否可重复          是否有序  定义待号
列表list   可变序列       可以重复               有序      []
元组tuple  不可变序列     可以重复               有序      ()
字典dict   可变序列    key不可重复，value可以     无序     {key:value}
集合set    可变序列      不可以重复              无序      {}


序列结构主要有列表、元组、集合、字典和字符申
正向递增索引取值范围[0,N-1]，反向递减索引取值范围[-1,-N]
切片操作语法结构:序列名[start:end:step]
创建列表的方式: 1) 使用[]直接创建2)使用内置函数list()创建
【列表的相关操作】：
    ①添加方法：append()和insert()
    ②删除方法：clear()、remove()、pop()
    ③列表元素的排序：sort()和内置函数sorted()
    ④其他方法：reverse()、copy()
    
【元组的相关操作】：
创建元组的方式：1)使用()直接创建 2)使用内置函数tuple()创建
创建字典的方式：1)使用{}直接创建 2)使用内置函数dict()创建
使用内置函数dict()创建字典的两种方式：
    1、通过映射函数zip(lst1,lst2)创建字典
    2、通过给定关键字创建字典：dict(key=value,key2=value2,keyN=valueN)
【字典的相关操作】：
    1、查询方法：get()、keys()、values()、items()
    2、删除方法:pop()、popitem()、clear()
    
【集合相关】：
创建集合的方法：1)使用{}直接创建 2)使用内资函数set()创建
集合的相关操作方法：
添加方法：add()
删除方法：remove()、clear()

列表、字典、集合都是python中的可变数据类型，元组是python中的不可变数据类型
列表、元组、集合的遍历都可以通过for循环实现
列表、元组、字典、集合的删除都可以使用语句del实现

这四种结构的数据中，使用d=d2的方式赋值，只是将d和d2指向了同一个内存地址，并没有创建新的对象
如果需要创建对象，除元组数据类型，列表、集合、字典需要使用copy或者遍历赋值的方式

'''

d = {"a": 10, "b": 20, "c": 30}
d2 = d
d["b"] = 100
print(d2['b'] + d['b'])

print('-' * 30)
d = [1, 2, 3, 4, 5, 6]
d2 = d
d[0] = 100
print(d[0] + d2[0])

print('-' * 30)
d = (1, 2, 3, 4, 5, 6, 7)
d2 = tuple(d[:])
print()
print('元组:', id(d), id(d2))

print('-' * 30)
d = {1, 2, 3, 4, 5, 6, 67}
d2 = d
print(id(d), id(d2))

print('#' * 30)
d = (1, 2, 3, 4, 5)  # 原始元组
# d2 = tuple(d[:])  # 创建一个新的元组 也会指向d，内存一致
d2 = tuple(list(d))
print(id(d), id(d2))  # True，内容相同

# 打印内容和检查内存地址
print(d == d2)  # True，内容相同
print(d is d2)  # False，指向不同的对象
print(id(d))  # 输出 d 的内存地址
print(id(d2))  # 输出 d2 的内存地址

# 内存指向性问题
# 列表、集合、字典都可以通过copy方式创建新的对象，内存指向不同的区块
# 元组不能通过copy方式创建新的对象，只能通过遍历赋值的方式创建新的对象，比如d2=tuple(list(d))
# 字典中，只能用不可变数据类型作为键名，比如：数字，字符串，元组
# 元组中只有一个元素时，不加逗号，则是其他类型了比如:d=(10) type是int d=(10,)type是tuple
